package com.diy.sigmund.diycommon.spring.anno;

import com.diy.sigmund.diycommon.entity.enumerate.VerifyParamPolicyEnum;
import java.lang.annotation.Repeatable;

/**
 * <br>参数校验注解
 * <br>所有的Annotation会自动继承java.lang.annotation.Annotation，并不能继承别的接口
 * <br>参数成员只能使用public或默认default这2个访问权修饰
 * <br>参数成员只能用基本数据类型和String、Enum、Class、annotation数据类型以及这一些类型的数组
 * <br>要获取类方法和字段的注解信息，必须通过Java的反射技术来获取Annotation对象，除此之外没有别的获取注解对象的方法
 *
 * @author ylm-sigmund
 * @since 2021/5/24 21:45
 */
// @Target(ElementType.METHOD)
// @Retention(RetentionPolicy.RUNTIME)
// @Documented
@Repeatable(VerifyParams.class)
public @interface VerifyParam {

    /**
     * 校验入参属性名称
     */
    String fieldName();

    /**
     * 校验入参策略枚举
     */
    VerifyParamPolicyEnum verifyPolicy() default VerifyParamPolicyEnum.NOT_NULL;

    /**
     * 校验值，可以是数字字符串，可以是格式化后的时间字符串，可以是正则表达式的字符串
     */
    String verifyValue() default "";

    /**
     * 提示信息
     */
    String msg() default "";

    /**
     * 响应码
     */
    String code() default "400";
}
